#ifndef PARTIDAMULTIJUGADOR_H
#define PARTIDAMULTIJUGADOR_H
#include "../modelo/Juego.h"
#include "GestorDeCliente.h"
#include <vector>
#include <stack>
#include "../common/Mutex.h"

class GestorDeCliente;

class PartidaMultijugador {
private:
	short IdPartida;
	short nivel;
	Juego* juego;
	std::vector<GestorDeCliente*> clientesConectados;
	short cantidadDeJugadores;
	unsigned short lugaresLibres;
	unsigned short sinConfirmar;
	std::stack<short> idJugadoresDisponibles;
	
	Mutex mutexConfirmacion;
	Mutex mutexConectarCliente;
	void handlerNuevo(Objeto *obj);
	void handlerDestruido(short id);
	void handlerGanada(short nada);
	void handlerPerdida(short nada);
	void hookEvent(Escenario* pSource);
	void hookEvent(Juego* pSource);
	void unhookEvent(Escenario* pSource);
public:
	PartidaMultijugador(GestorDeCliente* creador, short nivel, short cantidadDeJugadores, short IdPartida);
	virtual ~PartidaMultijugador(void);

	bool conectarCliente(GestorDeCliente* cliente);
	void desconectarCliente(GestorDeCliente* cliente);
	void confirmarInicio();
	void ejecutar();
	Juego* getJuego();
	short getId();
	short getLugaresLibres();
	short getCantidadDeJugadores();
	short getCodigoNivel();
};


#endif
